

import javax.swing.JApplet;

import sun.audio.*;

import java.io.*;
import java.applet.Applet;
import java.applet.AudioClip;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JPanel;
import javax.swing.Timer;
import javax.sound.sampled.*;

public class Fase extends JPanel implements ActionListener{
	private Image fundo;
	private Personagem personagem;
	private Timer timer;
	private int pontuacao;
	private boolean emJogo;
		private int cont =0;
	private List<Bacteria> inimigos;
	private int[][] coordenadas = {  {700, 40 },{1000,400},{1300,200},{650,300}, {900,170},{750,180},{700,100},
			{720,80},{600,50},{900,30},{1500,30},{1000,600},{1200,550},{1300,500},{1500,450},{1500,430},{700,500},
			{1200,550},{1000,501}
			};

	public Fase() {
		pontuacao=0;
		setFocusable(true);
		setDoubleBuffered(true);
		addKeyListener(new TecladoAdapter());
		ImageIcon referencia = new ImageIcon("res\\blood.jpg");
		fundo = referencia.getImage();
		personagem = new Personagem();
		emJogo = true;
		inicializaInimigos();
		timer = new Timer(5, this);
		timer.start();
//AudioClip sound1 = new AudioClip();
	}

	public void inicializaInimigos() {
		inimigos = new ArrayList<Bacteria>();
		for (int i = 0; i < coordenadas.length; i++) {
			inimigos.add(new Bacteria(coordenadas[i][0], coordenadas[i][1]));
		}

	}
    public static void music(int c) { 
    try	{
    	
    	if(c==1){
    	AudioInputStream audio = AudioSystem.getAudioInputStream(new File ("res\\Pacman.wav"));
    	Clip clip = AudioSystem.getClip();
    	clip.open(audio);
    	clip.start();
    	}
    }
    catch(UnsupportedAudioFileException uae) {
        System.out.println(uae);
    }
    catch(IOException ioe) {
        System.out.println(ioe);
    }
    catch(LineUnavailableException lua) {
        System.out.println(lua);
    }
}
    public int getpontuacao()
    {
    	return pontuacao;
    }
    
    	public void paint(Graphics g) {

		Graphics2D graficos = (Graphics2D) g;
		graficos.drawImage(fundo, 0, 0, null);
		if (emJogo == true) {

			graficos.drawImage(personagem.getImagem(), personagem.getX(), personagem.getY(), this);
			List<Tiro> misseis = personagem.getMisseis();

			for (int i = 0; i < misseis.size(); i++) {
				Tiro m = (Tiro) misseis.get(i);
				graficos.drawImage(m.getImagem(), m.getX(), m.getY(), this);
			}
			for (int i = 0; i < inimigos.size(); i++) {
				Bacteria in = inimigos.get(i);
				graficos.drawImage(in.getImagem(), in.getX(), in.getY(), this);
			}
			graficos.setColor(Color.RED);
			graficos.drawString("Inimigos:" + inimigos.size(), 5, 15);
		}
		else if(inimigos.size()==0){
			ImageIcon Venceu = new ImageIcon("res\\win.jpg");
			graficos.drawImage(Venceu.getImage(), 0, 0, null);
			pontuacao = 25*19;
		}
		else{
		cont = cont +1;
			music(cont);
			pontuacao = ((19-inimigos.size())*25);
			ImageIcon fimJogo = new ImageIcon("res\\over.png");
			graficos.drawImage(fimJogo.getImage(),0,0,null);
			
			
		}
		g.dispose();
	}

	@Override
	public void actionPerformed(ActionEvent arg0) {
		if (inimigos.size() == 0) {
			emJogo = false;
			
		}
		List<Tiro> misseis = personagem.getMisseis();
		for (int i = 0; i < misseis.size(); i++) {
			Tiro m = (Tiro) misseis.get(i);
			if (m.isVisivel()) {
				m.mexer();
			} else {
				misseis.remove(i);
			}
		}
		for (int i = 0; i < inimigos.size(); i++) {
			Bacteria in = inimigos.get(i);
			if (in.isVisivel()) {
				in.mexer();
			} else {
				inimigos.remove(i);
			}
		}
		personagem.mexer();
		checarColisoes();
		repaint();

	}

	public void checarColisoes() {
		Rectangle formapersonagem = personagem.getBounds();
		Rectangle formaMissel;
		Rectangle formaInimigo;
		for (int i = 0; i < inimigos.size(); i++) {
			Bacteria tempInimigo = inimigos.get(i);
			formaInimigo = tempInimigo.getBounds();
			if (formapersonagem.intersects(formaInimigo)) {
				personagem.setVisivel(false);
				tempInimigo.setVisivel(false);
				emJogo = false;

			}
		}
		List<Tiro> misseis = personagem.getMisseis();
		for (int i = 0; i < misseis.size(); i++) {
			Tiro tempMissel = misseis.get(i);
			formaMissel = tempMissel.getBounds();
			for (int j = 0; j < inimigos.size(); j++) {
				Bacteria tempInimigo = inimigos.get(j);
				formaInimigo = tempInimigo.getBounds();
				if (formaMissel.intersects(formaInimigo)) {
					tempInimigo.setVisivel(false);
					tempMissel.setVisivel(false);

				}
			}

		}
	}

	private class TecladoAdapter extends KeyAdapter {

		@Override
		public void keyPressed(KeyEvent e) {
			// TODO Auto-generated method stub
			if(e.getKeyCode() == KeyEvent.VK_ENTER)
			{
				emJogo = true;
				personagem = new Personagem();
				inicializaInimigos();
			}
			personagem.keyPressed(e);
			
		}

		@Override
		public void keyReleased(KeyEvent e) {
			// TODO Auto-generated method stub
			personagem.keyReleased(e);
		}

	}
}
